#if !defined(_SCOTT_H)
#define _SCOTT_H

#if defined(WIN32)
  #include "windows.h"
#endif

#include <boost/filesystem.hpp>
#include <boost/filesystem/operations.hpp>
#include <boost/filesystem/path.hpp>

#include "alias.h"
#include "Plugin.h"
#include "SException.h"

CREATE_ALIAS( Scott )

using namespace boost::filesystem;

/**
 * The interface of the SCOTT Core Library.
 */
class DECLARATION_DLL Scott
{
	protected:

		// WORKAROUND to compile SCOTT in Debug Mode: Explicit template instantiation (it doesn't work)
		//template class DECLARATION_DLL std::allocator<string>;
		//template class DECLARATION_DLL vector<string, std::allocator<string> >;
		//template class DECLARATION_DLL shared_ptr< std::vector<string, std::allocator<string>> >;

	public:

		/**
		 * Returns a string vector with all the name of the installed plugins.
		 */
		virtual StringVectorSp GetInstalledPluginNames();		

		/**
		 * Load a plugin and return a reference to it.
		 */
		virtual PluginSp CreatePlugin(string pluginName, PluginSpMapSp plugins, INameResolutorSp nameResolutor);
};

#endif  // _SCOTT_H
